package com.vilen.learn.java7.V4;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by vilen on 2017/9/24.
 * 一个既安全又活跃的类，第一眼看上去让人感觉很了不起。
 * 但随之而来的是性能问题，既安全又活跃的东西速度不一定也能很快。
 * 必须用synchronized去协调对Map arrivalTime的所有访问（get和put），
 * 而这个锁最终会把你的速度拖慢。这是并发处理方式的主要问题
 */
public class ExampleTimingNode implements SimpleMicroBlogNode {
    // 没有公开域
    private final String identifier;

    private final Map<Update, Long> arrivalTime = new HashMap<>();
    // 所有域在构造方法中初始化
    public ExampleTimingNode(String identifier_) {
        identifier = identifier_;
    }

    @Override
    public synchronized void propagateUpdate(Update upd_, SimpleMicroBlogNode backup_) {
        long currentTime = System.currentTimeMillis();
        arrivalTime.put(upd_, currentTime);
    }

    @Override
    public synchronized void confirmUpdate(SimpleMicroBlogNode other_, Update update_) {
        Long timeRecvd = arrivalTime.get(update_);
        System.out.println("Recvd confirm: " + update_.getUpdateText() + " from "
                + other_.getIdent());
    }

    @Override
    public String getIdent() {
        return identifier;
    }
}
